public boolean isBalanced(TreeNode root) {
        if(root == null) return true;
        int leftLength = maxDepth(root.left);
        int rightLength = maxDepth(root.right);
        //子问题思路，先判断当前结点左右树高度差，再判断左子树和右子树
        return Math.abs(leftLength - rightLength) <= 1 && 
        isBalanced(root.left) && isBalanced(root.right);
 }

    //求二叉树最大高度
    public int maxDepth(TreeNode root){
        if(root == null){
            return 0;
        }
        return Math.max(maxDepth(root.left),maxDepth(root.right)) + 1;
    }